package com.yuke.cloud.service.omc.entity;

import com.yuke.cloud.service.api.wmc.dto.WmsFlowApiDto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;
import java.util.Date;
import java.util.List;

@ApiModel(value = "com.yuke.cloud.service.omc.entity.OdsOrder")
@Data
@Table(name = "ods_order")
public class OdsOrder {
    /**
     * 主键，自增
     */
    @Id
    @Column(name = "order_id")
    @ApiModelProperty(value = "orderId主键，自增")
    private Long orderId;

    /**
     * 订单号，唯一
     */
    @Column(name = "order_sn")
    @ApiModelProperty(value = "orderSn订单号，唯一")
    private String orderSn;

    /**
     * 是否为厂家直销商品订单
     */
    @Column(name = "is_factory")
    @ApiModelProperty(value = "是否为厂家直销商品订单")
    private Boolean isFactory;

    /**
     * 订单类型， 0：未知；1：消费者向店铺下单；2：店铺向平台仓库下单
     */
    @Column(name = "order_type")
    @ApiModelProperty(value = "orderType订单类型， 0：未知；1：消费者向店铺下单；2：店铺向平台仓库下单")
    private Byte orderType;

    /**
     * 订单用户ID，与用户表关联
     */
    @Column(name = "user_id")
    @ApiModelProperty(value = "userId订单用户ID，与用户表关联")
    private Long userId;

    /**
     * 店铺ID
     */
    @Column(name = "shop_id")
    @ApiModelProperty(value = "shopId店铺ID")
    private Long shopId;

    /**
     * 厂家直销店铺ID
     */
    @Column(name = "factory_shop_id")
    @ApiModelProperty(value = "厂家直销店铺ID")
    private Long factoryShopId;

    /**
     * 订单所对应的发货仓库ID
     */
    @Column(name = "warehouse_id")
    @ApiModelProperty(value = "订单所对应的发货仓库ID")
    private Long warehouseId;

    /**
     * 订单所对应的发货仓库ID
     */
    @Column(name = "coupon_receive_id")
    @ApiModelProperty(value = "订单所对应的优惠券ID")
    private Long couponReceiveId;

    /**
     * 订单所对应的发货仓库ID
     */
    @Column(name = "red_receive_id")
    @ApiModelProperty(value = "订单所对应的红包ID")
    private Long redReceiveId;

    /**
     * 订单应该支付的金额，包含运费等，单位为分
     */
    @Column(name = "amount_payable")
    @ApiModelProperty(value = "amountPayable订单应该支付的金额，包含运费等，单位为分")
    private Integer amountPayable;

    /**
     * 已付金额，单位分
     */
    @Column(name = "amount_paid")
    @ApiModelProperty(value = "amountPaid已付金额，单位分")
    private Integer amountPaid;

    /**
     * 商品销售价总额，单位分
     */
    @Column(name = "product_price_total")
    @ApiModelProperty(value = "productPriceTotal商品销售价总额，单位分")
    private Integer productPriceTotal;

    /**
     * 商品优惠总金额，单位分，含优惠券金额、红包金额
     */
    @ApiModelProperty(value = "discount商品优惠总金额，单位分")
    private Integer discount;

    /**
     * 商品优惠券金额，单位分
     */
    @ApiModelProperty(value = "discountMoney商品优惠券金额，单位分")
    @Column(name = "discount_money")
    private Integer discountMoney;

    /**
     * 商品优惠券金额，单位分
     */
    @ApiModelProperty(value = "couponMoney商品优惠券金额，单位分")
    @Column(name = "coupon_money")
    private Integer couponMoney;

    /**
     * 红包金额，单位分
     */
    @ApiModelProperty(value = "redMoney红包金额，单位分")
    @Column(name = "red_money")
    private Integer redMoney;

    /**
     *满减金额，单位分
     */
    @ApiModelProperty(value = "reductionMoney红包金额，单位分")
    @Column(name = "reduction_money")
    private Integer reductionMoney;

    /**
     * 订单状态， 0：店铺/平台未确认；1：已确认，交由仓库发货；2：已完成；3：已取消（用户触发）；4：退货/退款（订单完成后）；5：部分退货/退款（订单完成后）；6：无效作废（管理员触发）
     */
    @Column(name = "order_status")
    @ApiModelProperty(value = "orderStatus订单状态， 0：店铺/平台未确认；1：已确认，交由仓库发货；2：已完成；3：已取消（用户触发）；4：退货/退款（订单完成后）；5：部分退货/退款（订单完成后）；6：无效作废（管理员触发）")
    private Byte orderStatus;

    /**
     * 订单支付状态， 0：未付款；1：已付款；2：货到付款
     */
    @Column(name = "pay_status")
    @ApiModelProperty(value = "payStatus订单支付状态， 0：未付款；1：已付款；2：货到付款")
    private Byte payStatus;

    /**
     * 商品配送方式，0：同城即时达（仓库发还是店铺发暂时还不确定），1：物流快递，2：同城快送（一般24小时左右送达），3：即时达（云顶店铺发货），4：即时达（由仓库发货）
     */
    @Column(name = "shipping_type")
    @ApiModelProperty(value = "shippingType商品配送方式，0：同城即时达（仓库发还是店铺发暂时还不确定），1：物流快递，2：同城快送（一般24小时左右送达），3：即时达（云顶店铺发货），4：即时达（由仓库发货）")
    private Byte shippingType;

    /**
     * 选择配送的快递公司ID
     */
    @Column(name = "express_id")
    @ApiModelProperty(value = "expressId选择配送的快递公司ID")
    private Long expressId;

    /**
     * 商品配送情况， 0：未发货； 1：备货中；2：已（开始）发货；3：已收货
     */
    @Column(name = "shipping_status")
    @ApiModelProperty(value = "shippingStatus商品配送情况， 0：未发货； 1：备货中；2：已（开始）发货；3：已收货")
    private Byte shippingStatus;

    /**
     * 配送时间方式。 0：工作日、双休日与假日均可送货; 1：只有双休日、假日送货（工作日不用送货）; 2：只有工作日送货（双休日、假日不用送） （一般为写字楼/商用/学校等地址客户选择）
     */
    @Column(name = "shipping_time")
    @ApiModelProperty(value = "shippingTime配送时间方式。 0：工作日、双休日与假日均可送货; 1：只有双休日、假日送货（工作日不用送货）; 2：只有工作日送货（双休日、假日不用送） （一般为写字楼/商用/学校等地址客户选择）")
    private Byte shippingTime;

    /**
     * 最佳送货时间
     */
    @Column(name = "best_shipping_time")
    @ApiModelProperty(value = "bestShippingTime最佳送货时间")
    private Date bestShippingTime;

    /**
     * 收货人的姓名
     */
    @ApiModelProperty(value = "consignee收货人的姓名")
    private String consignee;

    /**
     * 收货人性别，0：未知，1：男，2：女
     */
    @ApiModelProperty(value = "sex收货人性别，0：未知，1：男，2：女")
    private Byte sex;

    /**
     * 收货人的手机号
     */
    @ApiModelProperty(value = "mobile收货人的手机号")
    private String mobile;

    /**
     * 固定电话
     */
    @ApiModelProperty(value = "telephone固定电话")
    private String telephone;

    /**
     * 收货人的邮箱地址
     */
    @ApiModelProperty(value = "email收货人的邮箱地址")
    private String email;

    /**
     * 收货人国家ID
     */
    @Column(name = "region_country_id")
    @ApiModelProperty(value = "regionCountryId收货人国家ID")
    private Long regionCountryId;

    /**
     * 收货人省份ID
     */
    @Column(name = "region_province_id")
    @ApiModelProperty(value = "regionProvinceId收货人省份ID")
    private Long regionProvinceId;

    /**
     * 收货人城市ID
     */
    @Column(name = "region_city_id")
    @ApiModelProperty(value = "regionCityId收货人城市ID")
    private Long regionCityId;

    /**
     * 收货人区县ID
     */
    @Column(name = "region_county_id")
    @ApiModelProperty(value = "regionCountyId收货人区县ID")
    private Long regionCountyId;

    /**
     * 收货人详细地址
     */
    @ApiModelProperty(value = "address收货人详细地址")
    private String address;

    /**
     * 邮政编码
     */
    @Column(name = "post_code")
    @ApiModelProperty(value = "postCode邮政编码")
    private String postCode;

    /**
     * 配送费优惠金额，单位为分
     */
    @Column(name = "freight_reduce")
    @ApiModelProperty(value = "freightReduce配送费优惠金额，单位为分")
    private Integer freightReduce;

    /**
     * 应付配送费用，单位为分。应付配送费用为原有配送费用的基础上减掉优惠的配送费用。
     */
    @Column(name = "freight_payable")
    @ApiModelProperty(value = "freightPayable应付配送费用，单位为分。应付配送费用为原有配送费用的基础上减掉优惠的配送费用。")
    private Integer freightPayable;

    /**
     * 商品保价费用，单位为分
     */
    @Column(name = "insure_fee")
    @ApiModelProperty(value = "insureFee商品保价费用，单位为分")
    private Integer insureFee;

    /**
     * 是否索要发票，0：不需要，1：需要
     */
    @Column(name = "is_invoice")
    @ApiModelProperty(value = "isInvoice是否索要发票，0：不需要，1：需要")
    private Boolean isInvoice;

    /**
     * 发票类型，1：个人，2：公司
     */
    @Column(name = "invoice_type")
    @ApiModelProperty(value = "invoiceType发票类型，1：个人，2：公司")
    private Byte invoiceType;

    /**
     * 发票抬头
     */
    @Column(name = "invoice_head")
    @ApiModelProperty(value = "invoiceHead发票抬头")
    private String invoiceHead;

    /**
     * 发票内容
     */
    @Column(name = "invoice_content")
    @ApiModelProperty(value = "invoiceContent发票内容")
    private String invoiceContent;

    /**
     * 发票税额，单位为分
     */
    @Column(name = "invoice_tax")
    @ApiModelProperty(value = "invoiceTax发票税额，单位为分")
    private Integer invoiceTax;

    /**
     * 用户附言
     */
    @ApiModelProperty(value = "postscript用户附言")
    private String postscript;

    /**
     * 管理员或店铺人员备注
     */
    @ApiModelProperty(value = "note管理员或店铺人员备注")
    private String note;

    /**
     * 支付平台类型，0：货到付款；1：在线支付
     */
    @Column(name = "pay_type")
    @ApiModelProperty(value = "payType支付平台类型，0：货到付款；1：在线支付(银行/银联)；2：在线支付(支付宝)；3：在线支付（微信）；4：账户余额；5：积分支付")
    private Byte payType;

    /**
     * 支付平台ID号，与支付平台表相关联
     */
    @Column(name = "pay_platform_id")
    @ApiModelProperty(value = "payPlatformId支付平台ID号，与支付平台表相关联")
    private Integer payPlatformId;

    /**
     * 支付平台交易号
     */
    @Column(name = "trade_code")
    @ApiModelProperty(value = "tradeCode支付平台交易号")
    private String tradeCode;

    /**
     * 是否删除，0：未删除，1：已删除
     */
    @Column(name = "is_delete")
    @ApiModelProperty(value = "isDelete是否删除，0：未删除，1：已删除")
    private Boolean isDelete;

    /**
     * 是否给商家结算货款 0:未结算 1:已结算。一般根据某个周期结算一次，如7天的订单结算一次，对于店铺线下订货单，该项表示是否已经返利
     */
    @Column(name = "is_checkout")
    @ApiModelProperty(value = "isCheckout是否给商家结算货款 0:未结算 1:已结算。一般根据某个周期结算一次，如7天的订单结算一次，对于店铺线下订货单，该项表示是否已经返利")
    private Boolean isCheckout;

    /**
     * 已结算或返利金额，单位分
     */
    @Column(name = "amount_checkout")
    @ApiModelProperty(value = "amountCheckout已结算或返利金额，单位分")
    private Integer amountCheckout;

    /**
     * 佣金状态：佣金状态：0：未申请（或未发放），1：申请审核中，2：审核通过，3，已发放
     */
    @Column(name = "commission_status")
    @ApiModelProperty(value = "commissionStatus 佣金状态：0：未申请（或未发放），1：申请审核中，2：审核通过，3，已发放")
    private Byte commissionStatus;


    /**
     * 订单生成时间
     */
    @Column(name = "create_time")
    @ApiModelProperty(value = "createTime订单生成时间")
    private Date createTime;

    /**
     * 订单确认时间
     */
    @Column(name = "confirm_time")
    @ApiModelProperty(value = "confirmTime订单确认时间")
    private Date confirmTime;

    /**
     * 订单支付时间
     */
    @Column(name = "pay_time")
    @ApiModelProperty(value = "payTime订单支付时间")
    private Date payTime;

    /**
     * 发货时间
     */
    @Column(name = "send_time")
    @ApiModelProperty(value = "sendTime发货时间")
    private Date sendTime;

    /**
     * 收货时间
     */
    @Column(name = "accept_time")
    @ApiModelProperty(value = "acceptTime收货时间")
    private Date acceptTime;

    /**
     * 向发展该用户的店家发放提成
     */
    @Column(name = "shopCommission_amount")
    @ApiModelProperty(value = "shopCommissionAmount")
    private Integer shopCommissionAmount;

    @Column(name = "delivery_method")
    private Byte deliveryMethod;


    @Transient
    private String regionProvinceName;
    @Transient
    private String regionCityName;
    @Transient
    private String returnStatus;
    @Transient
    private String refuseReason;
    @Transient
    private String option;
    @Transient  //退货单id
    private Long returnId;
    @Transient  //退货金额
    private Integer refundMoney;
    @Transient  //商品所在城市ID
    private Long wareCityId;
    @Transient
    private boolean isRefund;
    @Transient
    private String regionCountyName;
    @Transient
    private List<OdsOrderGoods> odsgoods;
    @Transient
    private String ShopName;
    @Transient
    private String warehouseName;
    @Transient
    private List<OdsOrderGoods> goodsList;
    @Transient    //应付金额(元)
    private Double amountPayableDouble;
    @Transient    //已付金额(元)
    private Double amountPaidDouble;
    @Transient
    private Integer weight;
    @Transient
    private Long groupId;

    @Transient
    private List<WmsFlowApiDto> flowList;

}
